package com.mes.check.dao.iface;

import java.util.Date;
import java.util.List;
import java.util.Map;

import com.bstek.dorado.data.provider.Page;
import com.mes.check.domain.CheckTask;
import com.mes.common.dao.iface.IBasicDao;

public interface ICheckTaskDao extends IBasicDao<CheckTask>{

	public void getMaterialReadyCheckTasks(Page<CheckTask> page, Map<String, Object> parameter,
			com.bstek.dorado.data.provider.Criteria criteria) throws Exception;
	
	public List<CheckTask> getComingCheckTasks(String deptUid, Date beforeDate, Page<CheckTask> page);
	/**
	 * 获取某个检验任务的收料数量
	 * 
	 * @param taskUid
	 * @param checkDeptUid
	 * @return
	 */
	public Float getReceivedQty(String taskUid, String checkDeptUid);
	/**
	 * 获取某个检验任务的收料数量
	 * 
	 * @param checkTask
	 * @return
	 */
	public Float getReceivedQty(CheckTask checkTask);
	/**
	 * 获得某个检验任务的已派工数量
	 * 
	 * @param checkTaskUid
	 * @return
	 * @throws Exception
	 */
	public Float getDispatchedQty(String checkTaskUid) throws Exception;
	public List<CheckTask> getMaterialReadyCheckTasks(String checkDeptUid, Page<CheckTask> page);
	
	/**
	 * 取得某一部门所有待派工检验任务
	 * 
	 * @param deptUid
	 * @return
	 */
	public List<CheckTask> getUnDispatchCheckTasks(String deptUid, Page<CheckTask> page);

	/**
	 * 取得某一部门所有待派工检验任务
	 * 
	 * @param deptUid
	 * @param checkTaskType
	 * @param workCenterUid
	 * @param page
	 * @return
	 */
	public List<CheckTask> getUnDispatchCheckTasks(String deptUid, String checkTaskType, String checkWorkCenterUid,
			String drawingId, Page<CheckTask> page);

	/**
	 * 通过条码获取某一部门承担的带派工检验任务
	 * 
	 * @param barCode
	 * @param checkDeptUid
	 * @param page
	 * @return
	 */
	public List<CheckTask> getUnDispatchCheckTasksByBarCode(String barCode, String checkDeptUid, Page<CheckTask> page);
	
	/**
	 * 取得某一部门所有需要发送的检验任务
	 * 
	 * @param deptUid
	 * @return
	 */
	public List<CheckTask> getSendCheckTasks(String deptUid, Page<CheckTask> page);

//	/**
//	 * 取得某一部门所有未提交物料的检验任务
//	 * 
//	 * @param deptUid
//	 * @param page
//	 * @return
//	 */
//	public List<CheckTask> getUnRegisterCheckTasksByDept(String deptUid, Page<CheckTask> page);

	/**
	 * 取得某一设备所有未提交物料的检验任务
	 * 
	 * @param deptUid
	 * @param page
	 * @return
	 */
	public List<CheckTask> getUnRegisterCheckTasksByDevice(String deviceUid, Page<CheckTask> page);

//	/**
//	 * 取得某一员工所有未提交物料的检验任务
//	 * 
//	 * @param deptUid
//	 * @param page
//	 * @return
//	 */
//	public List<CheckTask> getUnRegisterCheckTasksByEmployee(String employeeUid, Page<CheckTask> page);

	public List<CheckTask> getComingCheckTasksOfCheckDept(String deptUid, Date beforeDate, Page<CheckTask> page);

	public List<CheckTask> getFirstCheckTasks(String taskUid) throws Exception;

	/**
	 * 根据工序任务号获取其所有检验任务
	 * 
	 * @param taskUid
	 * @return
	 */
	public List<CheckTask> getCheckTasksByTask(String taskUid);

	/**
	 * 根据工序任务号获取其所有未完检验任务
	 * 
	 * @param taskUid
	 * @return
	 */
	public List<CheckTask> getUnFinishCheckTasksByTask(String taskUid);

	public List<CheckTask> getUnFinishCheckTasks(String partUid, String batchNum, String checkDeptUid);

	/**
	 * 取得一检任务，暂时还未处理好
	 * 
	 * @param taskUid
	 * @return
	 * @throws Exception
	 */
	public CheckTask getFirstCheckTask1(String taskUid) throws Exception;

	public CheckTask getFirstCheckTask2(String taskUid) throws Exception;

	public CheckTask getFirstCheckTask3(String taskUid) throws Exception;

	/**
	 * 获取某一个检测部门对某一道工序任务的未完成三检任务
	 * 
	 * @param taskUid
	 *            任务唯一号
	 * @param checkDeptUid
	 *            部门唯一号
	 * @return
	 * @throws Exception
	 */
	public CheckTask getUnFinishFirstCheckTask3(String taskUid, String checkDeptUid) throws Exception;

	/**
	 * 获取道工序任务的未完成的某一类型检验任务 允许加入检测部门、测量仪器类别checkWorkCenterUid条件
	 * 
	 * @param taskUid
	 *            任务唯一号
	 * @param checkTaskType
	 *            检验类型
	 * @param checkDeptUid
	 *            部门唯一号
	 * @param checkWorkCenterUid
	 *            检验工作中心唯一号
	 * @return
	 * @throws Exception
	 */
	public CheckTask getUnFinishCheckTask(String taskUid, String checkTaskType, String checkDeptUid,
			String checkWorkCenterUid) throws Exception;

	// 取得某台设备上未完的首件三检任务，主要是为了判断合批任务是否该产生首件三检任务
	public CheckTask getDeviceFirstCheckTask3(String deviceUid, String operationUid) throws Exception;

	public CheckTask getOperationCheckTask(String taskUid) throws Exception;

	public CheckTask getSummaryCheckTask(String taskUid) throws Exception;

	/**
	 * 通过条码获取某一部门承担的检验任务
	 * 
	 * @param barCode
	 * @param checkDeptUid
	 *            可选参数
	 * @param page
	 * @return
	 */
	public List<CheckTask> getCheckTasksByBarCode(String barCode, String checkDeptUid, Page<CheckTask> page);

	/**
	 * 取得某一部门正在排队等待的任务
	 * 
	 * @param deptUid
	 * @param workCenterUid
	 * @param page
	 * @return
	 */
	public List<CheckTask> getWaitingFirstCheckTasks(String deptUid, Page<CheckTask> page);

	/**
	 * 取得某一部门正在排队等待的任务
	 * 
	 * @param deptUid
	 * @param workCenterUid
	 * @param drawingId
	 * @param page
	 * @return
	 */
	public List<CheckTask> getWaitingCheckTasks(String deptUid, String workCenterUid, String drawingId, Page<CheckTask> page);

	/**
	 * 获取某一个部门正在开始的任务
	 * 
	 * @param barCode
	 * @param page
	 * @return
	 */
	public List<CheckTask> getStartingCheckTasks(String deptUid, Page<CheckTask> page);

	/**
	 * 获取某一个部门deptUid在afterDate之后完成的任务
	 * 
	 * @param deptUid
	 * @param afterDate
	 * @param page
	 * @return
	 */
	public List<CheckTask> getFinishedCheckTasks(String deptUid, Date afterDate, Page<CheckTask> page);

	/**
	 * 获取某一个部门deptUid在afterDate之后完成的汇总检验
	 * 
	 * @param deptUid
	 * @param afterDate
	 * @param page
	 * @return
	 */
	List<CheckTask> getSummaryCheckTasksOfCheckDept(String deptUid, Page<CheckTask> page);
	
}
